package ar.uade.fain.ai.tpo.dao;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

public class CacheDAOSupport<T> {

	private DAOSupport support;
	private Set<T> entidades;

	public CacheDAOSupport() {
		super();
		this.support = DAOSupport.get();
		this.entidades = new HashSet<T>();
	}

	protected DAOSupport database() {
		return support;
	}

	public Set<T> buscarEnCache(Selector<T> selector) {
		HashSet<T> hashSet = new HashSet<T>();
		for (T entidad : getEntidades()) {
			if (selector.aceptar(entidad)) {
				hashSet.add(entidad);
			}
		}
		return hashSet;
	}

	public void agregarACache(T entidad) {
		if (entidad == null) {
			return;
		}
		if (!entidades.add(entidad)) {
			entidades.remove(entidad);
			entidades.add(entidad);
		}
	}

	public void quitarDelCache(T entidad) {
		entidades.remove(entidad);
	}
	
	public void quitarDelCache(Selector<T> selector) {
		entidades.removeAll(buscarEnCache(selector));
	}
	
	public void vaciar() {
		getEntidades().clear();
	}
	
	public Set<T> getEntidades() {
		return entidades;
	}

	public void setEntidades(Collection<T> entidades) {
		this.entidades = new HashSet<T>(entidades);
	}

}
